/*
 * @Author: fisher
 * @Date: 2024-02-18 19:25:21
 * @LastEditors: luthor luthor-li@qq.com
 * @LastEditTime: 2024-03-10 02:37:57
 * @FilePath: \allback\controllers\ueserverController.js
 * @Description:
 */

// const fs = require('fs-extra')
// const path = require('path')
// const dayjs = require('dayjs')
const ueserverService = require('../services/ueserverService')
const { generateId } = require('../utils/common')
// ue解压任务的状态
const unzipUeStatus = new Map()
// exports.copysignalling = async ctx => {
//   const { copyNum, ports } = ctx.request.body
//   async function copyAndConfigureServer(src, dest, configChanges) {
//     try {
//       // 复制源文件夹到目标文件夹
//       await fs.copy(src, dest)
//       // 指定配置文件路径
//       const configPath = path.join(dest, 'config.json') // 根据您的实际配置文件位置来更改路径
//       // 读取 JSON 配置文件内容
//       const config = await fs.readJson(configPath)
//       // 修改配置文件
//       Object.assign(config, configChanges)
//       // 写回 JSON 配置文件
//       await fs.writeJson(configPath, config, { spaces: 2 })
//       // 日志输出成功信息
//       console.log(`Server copied and configured: ${dest}`)
//       return `Server copied and configured: ${dest}`
//     } catch (err) {
//       // 错误处理
//       console.error(`Error while copying and configuring server: ${err}`)
//       throw err // 可能需要进一步的错误处理或响应
//     }
//   }
//   try {
//     const portList = ports.split(',')
//     const src = path.resolve(
//       __dirname,
//       '../UESERVER/pixelstream/SignallingWebServer'
//     )
//     for (let i = 0; i < parseInt(copyNum); i++) {
//       const dest = path.resolve(
//         __dirname,
//         `../UESERVER/pixelstream/copyserver${i}`
//       )
//       const configChanges = {
//         HttpPort: parseInt(portList[i]),
//         StreamerPort: parseInt(`8${portList[i]}`),
//         SFUPort: parseInt(`88${portList[i]}`)
//       }
//       await copyAndConfigureServer(src, dest, configChanges)
//     }
//     ctx.status = 200
//     ctx.body = {
//       message: '信令服务器复制成功!',
//       status: true
//     }
//   } catch (err) {
//     throw new HttpError('请检查参数是否正确!', 400)
//   }
// }

// exports.startServer = async ctx => {
//   try {
//     const configPath = path.resolve(
//       __dirname,
//       '../UESERVER/pixelstream/config.json'
//     )
//     ueserverService.startServer(configPath)
//     ctx.status = 200
//     ctx.body = {
//       message: '信令服务器启动成功!',
//       status: true
//     }
//   } catch (err) {
//     throw new HttpError(err.message, 400)
//   }
// }

// exports.getServerStatus = async ctx => {
//   try {
//     const status = await ueserverService.getServerStatus()
//     const essentialInfo = JSON.parse(status).map(process => ({
//       pm_id: process.pm_id,
//       name: process.name,
//       status: process.pm2_env.status,
//       created: dayjs(parseInt(process.pm2_env.created_at)).format(
//         'YYYY-MM-DD HH:mm:ss'
//       ),
//       update: dayjs(parseInt(process.pm2_env.pm_uptime)).format(
//         'YYYY-MM-DD HH:mm:ss'
//       )
//       //查看所有状态
//       // data: process
//     }))
//     ctx.status = 200
//     ctx.body = {
//       message: '获取信令服务器状态成功!',
//       status: essentialInfo
//     }
//   } catch (err) {
//     throw new HttpError(err.message, 400)
//   }
// }

// exports.stopServer = async ctx => {
//   try {
//     ueserverService.stopServer()
//     ctx.status = 200
//     ctx.body = {
//       message: '信令服务器停止成功!',
//       status: true
//     }
//   } catch (err) {
//     throw new HttpError(err.message, 400)
//   }
// }
// exports.deleteServer = async ctx => {
//   try {
//     ueserverService.deleteServer()
//     ctx.status = 200
//     ctx.body = {
//       message: '信令服务器删除成功!',
//       status: true
//     }
//   } catch (err) {
//     throw new HttpError(err.message, 400)
//   }
// }
// exports.updateServerConfig = async ctx => {
//   try {
//     const signallingPath = ['copyserver0', 'copyserver1']
//     const exeports = [884, 885]
//     // 指定配置文件路径
//     const configPath = path.resolve(
//       __dirname,
//       '../UESERVER/pixelstream/config.json'
//     ) // 根据您的实际配置文件位置来更改路径
//     let configChanges = {
//       apps: []
//     }
//     // 添加matchmaker配置
//     // configChanges.apps.push({
//     //   name: 'matchmaker',
//     //   script: 'matchmaker.js',
//     //   cwd: path.resolve(__dirname, '../UESERVER/pixelstream/Matchmaker'),
//     //   args: ''
//     // })
//     for (let i = 0, len = signallingPath.length; i < len; i++) {
//       // 添加信令服务器配置
//       configChanges.apps.push({
//         name: `signalling${i}`,
//         script: 'cirrus.js',
//         cwd: path.resolve(
//           __dirname,
//           `../UESERVER/pixelstream/${signallingPath[i]}`
//         ),
//         args: ''
//       })
//       // 添加ue文件运行配置
//       configChanges.apps.push({
//         name: `ue${i}`,
//         script: 'BuildTest.exe',
//         cwd: path.resolve(__dirname, `../UESERVER/uefiles/ueproject`),
//         args: `-RenderOffscreen -AudioMixer -PixelStreamingURL="ws://127.0.0.1:${exeports[i]}"`
//       })
//     }

//     // 写回 JSON 配置文件
//     await fs.writeJson(configPath, configChanges, { spaces: 2 })
//     ctx.status = 200
//     ctx.body = {
//       message: '信令服务器配置成功!',
//       status: true
//     }
//   } catch (err) {
//     throw new HttpError(err.message, 400)
//   }
// }

/**
 * @description: 由大文件地址，解压缩到uefile目录，用于UE运行
 * @param {*} ctx
 * @return {*}
 */
// exports.handleUefile = async ctx => {
//   const { filePath, fileName } = ctx.request.body
//   try {
//     const res = await ueserverService.handleUefile(filePath, fileName)
//     ctx.status = 200
//     ctx.body = {
//       status: true,
//       message: 'UE工程文件部署完成!',
//       data: res
//     }
//   } catch (err) {
//     throw new HttpError(err.message, 400)
//   }
// }
// exports.handleUefileSSE = async ctx => {
//   await ueserverService.handleUefileSSE(ctx)
// }
exports.getUefiles = async ctx => {
  const { pageSize, pageNo, name } = ctx.request.body
  try {
    const res = await ueserverService.getUefiles(pageSize, pageNo, name)
    ctx.status = 200
    ctx.body = {
      status: true,
      message: '获取UE工程文件列表成功!',
      data: res.records,
      page: {
        total: res.total,
        pageNo: pageNo,
        pages: Math.ceil(res.total / pageSize)
      }
    }
  } catch (err) {
    throw new HttpError(err.message, 400)
  }
}
exports.deleteUefiles = async ctx => {
  const { ids } = ctx.request.body
  try {
    const cancleDeleteFiles = await ueserverService.deleteUefiles(ids)
    if (!cancleDeleteFiles.length) {
      ctx.status = 200
      ctx.body = {
        status: true,
        message: '删除ue工程成功！'
      }
    } else {
      ctx.status = 200
      ctx.body = {
        status: false,
        message: '部分ue工程删除失败！原因：已关联实例。'
      }
    }
  } catch (error) {
    throw new HttpError(error.message, 400)
  }
}
// exports.msgBySignl = async ctx => {
//   const { msg, port, ip } = ctx.request.body
//   console.log('mms = ', msg, port, ip)
//   ctx.status = 200
//   ctx.body = {
//     status: true,
//     message: '信令服务器收到消息!',
//     data: msg
//   }
// }

exports.unzipUe = async ctx => {
  const { filePath, fileName } = ctx.request.body
  const taskId = generateId('unzip_', 9)
  try {
    ueserverService.unzipUe(filePath, fileName, unzipUeStatus, taskId)
    ctx.status = 200
    ctx.body = {
      status: true,
      message: 'UE工程文件解压开始!',
      data: taskId
    }
  } catch (err) {
    throw new HttpError(err.message, 400)
  }
}
exports.getUnzipUeProgress = async ctx => {
  const { taskId } = ctx.params
  try {
    // 获取合并进度
    const status = unzipUeStatus.get(taskId) || {
      status: false,
      data: 'pending'
    }
    ctx.status = 200
    ctx.body = {
      status: true,
      message: '查询解压进度成功！',
      data: status
    }
  } catch (err) {
    throw new HttpError(err.message, 400)
  }
}
